←
▼
▲
Sub ClearEnvVars()
現在のプロセスの環境変数をほぼすべて削除します。
(src)
→ T_Var.vbs # T_LoadEnvVars
テスト
VBScript から削除できない環境変数は残ります。
←
▼
▲
関連
Function OpenForEnvVarsFile( EnvVarsFilePath as string ) as EditEnvVarsFile
(src)
環境変数ファイルを編集します。
Dim f : Set f = OpenForEnvVarsFile( "settings.txt" )
echo f.get_( "VAR_A" )
f.set_ "VAR_A", "1"
f.select_ "VAR_A", "1", Array( "VAR_A", "VAR_B", "VAR_C" ), "0"
f = Empty '// Write
【引数】
EnvVarsFilePath
返り値
環境変数ファイルのパス
サンプル:
ランダムアクセスに対応しています。 OpenForRead や OpenForWrite のように
シーケンシャル(ファイルの先頭から順番)にアクセスする必要はありませんし、
変更しないキーまで Write する必要はありません。
存在しない環境変数を新規に set_ したときは、ABC 順でファイルに記述されます。
Empty の値を set_ すると、その環境変数はファイルから削除されます。
settings.txt
VAR_A
1
1
VAR_A
→ T_VarFile.vbs # [T_VarFile1]
テスト
VAR_A
←
▼
▲
.Path
Property .Path as string
.get_
Function .get_( Name as string ) as string
Name が定義されていないときは、Empty を返します
Sub .set_( Name as string, Value as string or Empty )
.set_
Sub select_( Name as string, Value as string,
OtherNames as array of string, OtherValue as string )
.select_
関連
←
▼
▲
Sub SetVarInBatchFile( Path as string, Symbol as string, Value as variant )
バッチ・ファイルの中で、環境変数を設定している部分の値を変更します。
【引数】
Path
Symbol
バッチ・ファイルのパス
環境変数の名前
Value
環境変数の値
テスト
→ T_VarFile.vbs
T_SetVarInBatchFile
ソース
→ vbslib.vbs
←
▼
▲
エディター等の設定を変更する
Sub Start_VBS_Lib_Settings()
を起動します。
→ vbslib.vbs
ソース
→ SettingTemplate.xml
←
▼
▲
新規にエラーを発生させます。
未知のエラーを発生させます。
Finally ブロックに似た記述をする
関連
テスト
→ T_Err2 フォルダ
警告を表示してプロセスを終了します。
←
▼
▲
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num = E_FileNotExist Then ... : e.Clear
If e.num <> 0 Then e.Raise
関連
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
If Trying Then ...
If Trying Then ...
If TryEnd Then On Error GoTo 0
If e.num = E_FileNotExist Then ... : e.Clear
If e.num <> 0 Then e.Raise
Try ブロックの中が、1行だけのとき
Try ブロックの中が、複数行のとき
Trying は、毎行記述する必要があります。
エラーが発生しても、TryStart〜TryEnd の間で続きを実行する場合は、
Trying は不要です。
TryStart を使うと、エラーが発生した場所で、ブレークさせることができます。
E_FileNotExist
E_FileNotExist
ブレークさせるときは、Err2::BreakErrID を設定してください。
On Error Resume Next を呼び出したらブレークしなくなるので、TryStart が、
On Error Resume Next を呼び出すべきかどうかを判定します。
サンプル
→ _err2_test.lzh
Try ブロックの中で発生したエラーでブレークさせるとき
If g_count_up(1)=0 Then Stop '// watch-> g_count [TODO]
echo "g_count(1)=" & g_count(1)
If g_count(1) < 99 Then
If TryStart(e) Then On Error Resume Next
End If
参考
関連
エラーをキューにためる
クリアしたエラーが発生した場所を調べるときは、クリアする代わりに
Err2::Raise してください。
←
▼
▲
Public Number ' Err.Number
Public num ' Err.Number
Public Description ' Err.Description (Error Message)
Public desc ' Err.Description (Error Message)
Public Source ' Err.Source
Public ErrID ' count of (num <> 0) in each first Copy after Clear
Public RaiseID ' count of (num <> 0) in Copy
Public BreakErrID ' as integer
Public BreakRaiseID ' as integer
(src)
Dim g_Err2 as Err2
メンバ関数
err オブジェクトの内容をコピーします。
同じ内容のエラーを再度発生させる。
エラーの内容を変えて、再度エラーを発生させる。
エラーをクリアする。
TryStart を呼び出すと、Err2 オブジェクトを取得できます。
また、g_Err2 グローバル変数からアクセスすることもできます。
メンバ変数
関連
テスト
→ T_Err2 フォルダ
他にもあります。
←
▼
▲
Property Get Err2::Number() as integer
エラーコード。
Property Get Err2::num() as integer
エラー状態でなければ、0 になります。
←
▼
▲
Property Get Err2::Description() as string
エラー・メッセージ。
Property Get Err2::desc() as string
エラーメッセージを表示して、エラー状態から復帰し、 続きを実行する
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then
echo_v "Error 0x"+ Hex( e.num ) +": "+ e.Description
e.Clear
End If
復帰する前にエラーが発生した場所でブレークするには、Clear の前に Raise
を追加してください。
echo_v "Error 0x"+ Hex( e.num ) +": "+ e.Description
e.Raise
e.Clear
←
▼
▲
Property Get Err2::ErrStr() as string
XML形式のエラーメッセージ。
エラーメッセージの例:
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
関連
←
▼
▲
Function Err2::GetErrStr() as string
標準形式のエラーメッセージを返す。
(src)
エラーメッセージの例:
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
関連
廃止されました
←
▼
▲
Property Get Err2::DebugHint() as string
エラーの内容とデバッグのヒント。
サンプル:
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then echo e.DebugHint : e.Clear
エラーメッセージの例:
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、
デバッガに接続して問題がある場所で停止します。
"T_Err2_Clear.vbs"
------------------------------------------------------------------
g_debug = 2
------------------------------------------------------------------
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
テスト
→ T_InputCommand.vbs # T_InputCommand_ForgetClear
←
▼
▲
Function Err2::Value() as string
エラーの内容を文字列型で返します。
(src)
廃止されました
←
▼
▲
Sub Err2::Copy( err as Err )
err オブジェクトの内容をコピーします。
(src)
←
▼
▲
Sub Err2::Raise()
同じ内容のエラーを再度発生させる。
(src)
←
▼
▲
Sub Err2::OverRaise( e_num as integer, e_desc as string )
エラーの内容を変えて、再度エラーを発生させる。
(src)
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then
If Right( e.Description, 2 ) = "/>" Then
message = Left( e.Description, Len( e.Description ) - 2 ) + _
" msg2=""追加メッセージ。""/>"
e.OverRaise e.Number, message
Else
e.Raise
End If
End If
エラーが発生して、そのエラーメッセージが XML 形式なら、属性
msg2="追加メッセージ。" を追加します。
関連
←
▼
▲
Sub Err2::Clear()
エラーをクリアする。
エラー処理が終わったことを示すため、メンバ変数をリセットします。
num = 0 : Description = "" : RaiseID = 0
(src)
関連
エラーメッセージを取得する
エラーの情報コピーしてクリアする
←
▼
▲
Sub Err2::CopyAndClear( out_e2 as Err2 )
エラーの情報を out_e2 にコピーしてから Err2 のエラーをクリアします。
参考
内部で Err2 オブジェクトが生成されて、out_e2 に格納されます。
テスト
→ T_Err2_Main.vbs # T_Err2_CopyAndClear
(src)
CopyAndClear した後でエラーが発生した場合、テストによるエラーであると判断して、
次のようなメッセージが表示されます。
'//エラーが発生した場所を知るには、CopyAndClear する前に Raise してください。
次のように Raise するコードを追加してください。
'//=== Error Handling Test
echo vbCRLF+"Next is Error Test"
If TryStart(e) Then On Error Resume Next
Test '// ここでエラーが発生する
If TryEnd Then On Error GoTo 0
e.Raise '// これを追加する
e.CopyAndClear e2 '//[out] e2
Assert e2.num <> 0 '// テストによるエラーが発生した場所
e.Raise
また、
を設定していたら、設定を無効にしてください。
←
▼
▲
Sub Err2::EnqueueAndClear()
エラーの情報を Err2 の内部キューに入れてから Err2 のエラーをクリアします。
テスト
→ T_Err2_Main.vbs # T_Err2_EnqueueAndClear
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
Err.Raise 1,, "Error1"
If TryEnd Then On Error GoTo 0
e.EnqueueAndClear
If not IsEmpty(e) Then s = e.DequeueAll() : If s <> "" Then Raise 1, s
EnqueueAndClear
(src)
←
▼
▲
Function Err2::DequeueAll() as string
Err2 の内部キューの内容を返し、内部キューを空にします。
テスト
→ T_Err2_Main.vbs # T_Err2_EnqueueAndClear
エラーがキューに入っていないときは、"" を返します。
参考
(src)
<ERROR msg="Error1"/>
<ERROR msg="Error2"/>
XML 書式のエラーメッセージを取得したいときは、ルート要素(タグ)を追加する
必要があるか検討してください。
サンプル返り値
←
▼
▲
Dim Err2::ErrID as integer
エラーの通し番号。
エラーが発生して初めての TryEnd を通ったとき +1 されます。
Err2::Clear した後で、次のエラーが発生すると +1 されます。
関連
←
▼
▲
Dim Err2::RaiseID as integer
エラーの通し番号。
エラーが発生して TryEnd を通るたびに +1 されます。
Err2::Clear で 0 に戻ります。
←
▼
▲
Dim Err2::BreakErrID as integer
デバッガでブレークするエラーの通し番号。
エラーメッセージの前に g_debug を設定するように表示されます。 このメッセージに従って、
デバッガを起動すると、エラーが発生した場所でブレークします。
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、
デバッガに接続して問題がある場所で停止します。
"T_Err2_Clear.vbs"
------------------------------------------------------------------
g_debug = 2
------------------------------------------------------------------
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
Visual Studio 2008 以降では、エラーが発生した場所からステップ実行することができます。
'--- start of parameters for vbslib include -------------------
g_debug = 1.5
エラーが発生したら Err2::ErrID が+1されますが、Err2::ErrID = Err2::BreakErrID に
なったら、エラーによってデバッガでブレークします。 次に Err2:ErrID が+1されるのは、
Err2::Clear した後にエラーが発生したときです。 それまでの Err.Raise では、Err2:ErrID
ではなく、Err2:RaiseID が+1されます。
ただし、TryStart 〜 TryEnd の間ではないとき(On Error Next Resume を実行していない
とき)にエラーが発生したときは、Err2::BreakErrID の値にかかわらず、エラーが発生したら
必ずエラーブレークします。
サンプル:
参考
関連
g_Err2.BreakErrID を 1.5 とすると、Err2::ErrID が 1 のときのエラーをキャッチする
TryEnd または Trying でブレークします。
通常、
vbslib.vbs をインクルードしたら、g_Err2::BreakErrID に設定されます。
は、エラーではありませんが、内部で Err.Raise を呼び出しているため、
Err2:ErrID が+1されます。
に設定してください。
g_debug が小さすぎると、後で復帰するために問題の無いエラーでブレークします。
また、ブレークしたときはエラー復帰が行われなくなります。
とりあえずデバッガに接続したいときは、十分に大きい値を設定するか、0 に設定して
エラーメッセージから必要な値を確認してください。
←
▼
▲
Dim E_Others : E_Others = 1
Dim E_TestPass : E_TestPass = 21
Dim E_TestSkip : E_TestSkip = 22
Dim E_TestFail : E_TestFail = 23
Dim E_BuildFail : E_BuildFail = &h80041004
Dim E_OutOfWritable : E_OutOfWritable = &h80041005
Dim E_NotFoundSymbol : E_NotFoundSymbol = &h80041006
Dim E_ProgRetNotZero : E_ProgRetNotZero = &h80041007
Dim E_Unexpected : E_Unexpected = &h80041008
Dim E_TimeOut : E_TimeOut = &h80041009
Dim E_WIN32_FILE_NOT_FOUND: E_WIN32_FILE_NOT_FOUND = &h80070002
Dim E_WIN32_DIRECTORY : E_WIN32_DIRECTORY = &h8007010B
Dim E_ProgTerminated : E_ProgTerminated = &hC0000005
Dim E_BadType : E_BadType = 13
Dim E_FileNotExist : E_FileNotExist = 53
Dim E_EndOfFile : E_EndOfFile = 62
Dim E_WriteAccessDenied : E_WriteAccessDenied = 70
Dim E_ReadAccessDenied : E_ReadAccessDenied = 70
Dim E_PathNotFound : E_PathNotFound = 76
Dim E_AlreadyExist : E_AlreadyExist = 58
(src)
関連
→ Windows エラーコード
←
▼
▲
が呼ばれないで、スクリプトが終了しました。
または
〜 TryEnd でエラー処理するときの最後に必要な
を設定して、エラーが発生した場所でブレークして、コールスタックを参照
して、TryStart 〜 TryEnd のエラー処理に、Err2::Clear または Err2::Raise を記述してください。
<ERROR msg="Script finished before Err2.Clear or Raise the error"
jp="エラー処理の途中で終了しました。Err2.Clear または再 Raise してください"
err_symbol="E_NotClear" />
エラーメッセージ:
VBScript global code (メインvbs の vbslib include)
ResumePop
CallFinalizeInModules
(= g_FinalizeModules(i))
FinalizeModule (vbslib.vbs)
Err2.OnSuccessFinish
echo GetErrStr( num, Description )
0
←
▼
▲
<ERROR msg="Out of Diff"
src=
"C:\folder\file1.txt"
dst=
"C:\folder"
/>
<ERROR
ログを検索する時は、"<ERROR " で検索すると、すぐに見つかります。
エラーが発生したときは、"<WARNING " で検索すると問題を解決するヒント
が得られるかもしれません。
msg
自然言語のエラーメッセージ
src, dst など
値がパスのときは、タグジャンプができるように新しい行から値を書く。
関連
XML を使って、エラー情報を構造化します。
もしエラー情報の一部を取得したいときは、エラーメッセージ(Err2.Description) を
に渡してください。 参考
<ERROR msg="シンボルが見つかりません" path="SymbolA"/>
<WARNING msg="アップデートのチェックはスキップしました。"/>